
    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>什么是 Nginx 的缓存？如何设置？ - 学习卡片</title>
      <style>
        body { font-family: sans-serif; background-color: #f0f8ff; color: #333; display: flex; flex-direction: column; align-items: center; padding: 50px 20px; }
        .header h1 { font-size: 32px; }
        .grid-container { display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; width: 100%; max-width: 1200px; }
        .card-container { perspective: 1200px; cursor: pointer; height: 250px; }
        .card { width: 100%; height: 100%; position: relative; transform-style: preserve-3d; transition: transform 0.7s; border-radius: 16px; box-shadow: 0 4px 16px rgba(0,0,0,0.08); }
        .card-container.flipped .card { transform: rotateY(180deg); }
        .card-face { position: absolute; width: 100%; height: 100%; backface-visibility: hidden; display: flex; flex-direction: column; box-sizing: border-box; border-radius: 16px; background-color: #fff; padding: 24px; }
        .card-back { background-color: #f0fff4; transform: rotateY(180deg); justify-content: space-between; }
        .card-category { font-size: 14px; color: #0052d9; margin-bottom: 8px; font-weight: 500; }
        .card-question { font-size: 20px; font-weight: 500; flex-grow: 1; display: flex; align-items: center; justify-content: center; text-align: center; }
        .card-answer-wrapper { flex-grow: 1; overflow-y: auto; }
        .card-answer { font-size: 15px; line-height: 1.7; }
        .card-footer { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 16px; margin-top: 16px; }
        .card-source { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 12px; margin-top: 12px; }
      </style>
    </head>
    <body>
      <div class="header">
        <h1>什么是 Nginx 的缓存？如何设置？ - 学习卡片</h1>
      </div>
      <div class="grid-container">
        
    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">理论</div>
          <div class="card-question">使用 Nginx 缓存能带来哪些主要优势？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">理论</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">主要优势包括：1. 提升性能，通过减少对后端服务器的请求和网络延迟来提高响应速度。2. 降低服务器负载，减少后端处理请求的次数。3. 改善用户体验，提供更快的响应。4. 节省带宽，减少不必要的数据传输。</div>
          </div>
          <div class="card-source">来源: Nginx 缓存的基本概念 - 缓存的作用与优势</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">特性</div>
          <div class="card-question">Nginx 支持哪几种主要的缓存类型？请简要说明。</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">特性</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">Nginx 支持四种主要缓存类型：1. 内容缓存（Content Caching），用于缓存HTML、CSS、图片等静态资源。2. 代理缓存（Proxy Caching），当作为反向代理时，缓存从后端服务器获取的响应。3. FastCGI缓存（FastCGI Caching），用于缓存PHP等通过FastCGI协议处理的动态内容。4. 微缓存（Microcaching），一种用于高并发场景的短时间缓存策略。</div>
          </div>
          <div class="card-source">来源: Nginx 缓存的基本概念 - 缓存类型</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">Nginx 是如何决定一个请求是否命中缓存的？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">当 Nginx 接收到请求时，它会首先根据请求的 URL、参数及自定义规则生成一个唯一的缓存键（Cache Key）。然后，Nginx 使用这个缓存键在配置的缓存目录中查找对应的缓存文件。如果找到了文件并且该文件未过期，则视为缓存命中，直接返回缓存数据。</div>
          </div>
          <div class="card-source">来源: Nginx 缓存的工作原理 - 1. 缓存请求的处理</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">在 Nginx 配置中，`proxy_cache_path` 指令的作用是什么？请解释其核心参数 `keys_zone` 和 `max_size`。</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">`proxy_cache_path` 指令用于定义缓存文件的存储目录和相关参数。其中，`keys_zone` 用于定义一个共享内存区域的名称和大小，该区域专门用来存储缓存键及其元数据；`max_size` 则用于限制磁盘上缓存文件的最大总存储空间。</div>
          </div>
          <div class="card-source">来源: Nginx 缓存的配置基础 - 1. 缓存目录设置</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">Nginx 是如何利用 HTTP 头部信息来验证缓存有效性的？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">Nginx 通过 HTTP 头部中的 `ETag` 和 `Last-Modified` 字段进行缓存验证。当一个缓存项可能过期时，Nginx 会向后端服务器发送一个带有 `If-None-Match` 或 `If-Modified-Since` 头部的条件请求。如果后端服务器判断内容未改变，则返回 304 Not Modified 状态码，Nginx 继续使用本地缓存，从而避免了重新传输整个资源。</div>
          </div>
          <div class="card-source">来源: Nginx 缓存的工作原理 - 3. 缓存验证与更新</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">`proxy_cache_use_stale` 指令有什么作用？它如何提升系统的高可用性？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">`proxy_cache_use_stale` 指令定义了在后端服务器出现故障（如错误、超时或正在更新）时，Nginx 可以使用已过期的缓存数据来响应客户端请求。这可以确保即使后端服务暂时不可用，用户仍然能收到响应，从而保证了服务的连续性，提升了系统的高可用性。</div>
          </div>
          <div class="card-source">来源: Nginx 缓存的配置基础 - 2. 缓存区块设置</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">理论</div>
          <div class="card-question">实施 Nginx 缓存策略时，开发者需要面对哪些主要挑战？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">理论</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">主要挑战有三个：1. 缓存一致性，即如何确保缓存中的数据与源服务器的数据保持一致。2. 缓存失效策略，即如何设计有效的策略，在源数据更新后能及时刷新缓存。3. 缓存过期管理，即如何根据应用需求设置合理的缓存过期时间以平衡性能和数据新鲜度。</div>
          </div>
          <div class="card-source">来源: Nginx 缓存的基本概念 - 缓存的挑战</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">在高并发场景下，`proxy_cache_lock` 指令能解决什么问题？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">`proxy_cache_lock` 指令用于启用缓存锁。当多个并发请求同时请求一个当前未被缓存的资源时，该指令可以确保只有一个请求被发送到后端服务器获取数据，其他并发请求则会等待第一个请求完成后从新生成的缓存中获取内容。这可以有效防止大量请求同时穿透到后端，减轻后端服务器的压力。</div>
          </div>
          <div class="card-source">来源: Nginx 缓存的高级配置 - 4. 缓存同步与一致性</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">如何配置 Nginx 来手动清除指定的缓存内容？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">可以通过配置 `proxy_cache_purge` 指令来实现手动缓存清理。通常需要创建一个专用的 location (例如 /purge)，并设置访问权限（如只允许本地IP访问），然后在该 location 中使用 `proxy_cache_purge` 指令，并指定要清理的缓存区域和用于匹配的缓存键。</div>
          </div>
          <div class="card-source">来源: Nginx 缓存的配置基础 - 4. 缓存控制指令</div>
        </div>
      </div>
    </div>

      </div>
    </body>
    </html>
